realmcrafterfandomcom-20200216-history
3D Main Menu Background Source Tutorial
Created by cysis145 on the RealmCrafter: Community Edition forums. This edit is generally improve the 3D background on the main menu. This edits improves performance. For this tut i will be going through each section in order that they appear in the client.Exe Note that i haven't included a section for the start menu, since i removed it from my client. Make a backup before starting this tut!!! If you've already added a 3d background from v1.0 of this tut then you should undo all those changes. follow the v1.0 tut again but backwards and undo the changes. Open MainMenu.bb and start by finding Function EULAScreen(). Add If FileType("Data\Meshes\Character Set\E_Set.eb3d") = 1 Set = LoadMesh("Data\Meshes\Character Set\E_Set.eb3d") If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\E_Set.eb3d!") Else Set = LoadMesh("Data\Meshes\Character Set\Set.b3d") If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\Set.b3d!") EndIf ;Possition set PositionEntity Set, -210, -35, -145 ScaleEntity Set, 30, 30, 30 under ; Do not display if .txt file is empty If FileType("Data\Game Data\EULA.txt") <> 1 Or FileSize("Data\Game Data\EULA.txt") = 0 Return EndIf This will load the 3d model. Next add Background = GY_CreateQuad(Cam) PositionEntity(Background, -7.5, 7.0, 10.0) ScaleEntity(Background, 15, 14.0, 1.0) EntityOrder(Background, -1) Tex = LoadTexture("Data\Textures\Menu\EULA.png") EntityTexture(Background, Tex) FreeTexture(Tex) under ;Possition set PositionEntity Set, -210, -35, -145 ScaleEntity Set, 30, 30, 30 it should now look something like... Function EULAScreen() ; Do not display if .txt file is empty If FileType("Data\Game Data\EULA.txt") <> 1 Or FileSize("Data\Game Data\EULA.txt") = 0 Return EndIf ; Background If FileType("Data\Meshes\Character Set\E_Set.eb3d") = 1 Set = LoadMesh("Data\Meshes\Character Set\E_Set.eb3d") If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\E_Set.eb3d!") Else Set = LoadMesh("Data\Meshes\Character Set\Set.b3d") If Set = 0 Then RuntimeError("Could not load Data\Meshes\Character Set\Set.b3d!") EndIf ;Possition set PositionEntity Set, -210, -35, -145 ScaleEntity Set, 30, 30, 30 Background = GY_CreateQuad(Cam) PositionEntity(Background, -7.5, 7.0, 10.0) ScaleEntity(Background, 15, 14.0, 1.0) EntityOrder(Background, -1) Tex = LoadTexture("Data\Textures\Menu\EULA.png") EntityTexture(Background, Tex) FreeTexture(Tex) IMPORTANT: you must create a texture and call it EULA (must be a .png) and put it in "\textures\menu\" folder, if you dont, it will cause a mav. This texture will appear behind the text for your EULA if you have one. It should be 700x690 res (default) but you can adjust the scale and location of the image yourself. Next find Function LogIn() replace Background = GY_CreateQuad(Cam) PositionEntity(Background, -10.0, 7.5, 10.0) ScaleEntity(Background, 20.0, 15.0, 1.0) EntityOrder(Background, 1) Tex = LoadTexture("Data\Textures\Menu\Login.png") If Tex = 0 Then RuntimeError("File not found: Data\Textures\Menu\Login.png!") EntityTexture(Background, Tex) FreeTexture(Tex) with ;Background Background = GY_CreateQuad(Cam) PositionEntity(Background, 0, 0, 10.0) ScaleEntity(Background, 7.0, 2.9, 1.0) EntityOrder(Background, -1) Tex = LoadTexture("Data\Textures\Menu\LoginBox.png") EntityTexture(Background, Tex) FreeTexture(Tex) Background3 = GY_CreateQuad(Cam) PositionEntity(Background3, -0.64, 1.4, 2) ScaleEntity(Background3, 1.35, 0.7, 1.0) EntityOrder(Background3, -1) Tex3 = LoadTexture("Data\Textures\Menu\Menu Logo.png", 4) EntityTexture(Background3, Tex3) FreeTexture(Tex3) IMPORTANT: just like before you'll need to create 2 new textures and put them in \textures\menu\ folder. Both MUST be .png. LoginBox.png is the texture you want to appear behind the login text fields etc. Menu Logo.png is your GAME LOGO. For some reason if you try to remove the Sprite (old logo code) in Character Select it causes a MAV the easiest fix is to make your "Menu Logo.bmp" just black, it will come up as transparent and you wont be able to see it. It can be found in "Data\Textures\". Next in Function RunMenu() add ; Setfogrange Distance and colour CameraRange Cam, 1, 30000 CameraFogMode Cam,1 CameraFogRange Cam, 300, 5200 CameraFogColor Cam, 0, 51, 102 below GY_Load(Cam) You can adjust those settings to your hearts content. Now for creating dynamic Lights in your set. Before moving onto this section you must know you cannot have more than 8 lights rendering at once or Blitz will crap itself and just die. Keep that in mind when designing your set. Now starting with Ambient lighting add ;Ambient Light Amb_Light = CreateLight(1) ;the 1 means ambient LightRange Amb_Light, 10000 ;range (want it high so it reaches everything) LightColor Amb_Light, 0, 51, 102 ;RBG colour PositionEntity Amb_Light, 0, 1000, 0 ;XYZ positioning under ; Setfogrange Distance and colour CameraRange Cam, 1, 30000 CameraFogMode Cam,1 CameraFogRange Cam, 300, 5200 CameraFogColor Cam, 0, 51, 102 To add an omni light add the following ;Omni Lights Om_Light1 = CreateLight(2) ; 2 means omni LightRange Om_Light1, 150 LightColor Om_Light1, 204, 102, 0 PositionEntity Om_Light1, -400, 300, 800 under your ambient light code. if you want to add another then just change the name of the light for example Om_Light2 = CreateLight(2) LightRange Om_Light2, 150 LightColor Om_Light2, 204, 102, 0 PositionEntity Om_Light2, -300, 250, 300 etc. It should end up looking something like... Function RunMenu() F = ReadFile("Data\Options.dat") If F = 0 Then RuntimeError("Could not open Data\Options.dat!") Width = ReadShort(F) Height = ReadShort(F) Depth = ReadByte(F) AA = ReadByte(F) DefaultVolume# = ReadFloat#(F) GrassEnabled = ReadByte(F) AnisotropyLevel = ReadByte(F) FullScreen = ReadByte(F) VSync = ReadByte(F) CloseFile(F) ResolutionType = 0 ; !WideScreen Ratio 4:3 Ramoida If GfxMode3DExists(Width, Height, 16) Or GfxMode3DExists(Width, Height, 32) If (Width * 9) = (Height * 16) Then ResolutionType = 1 ; WideScreen Ratio 16:9 Ramoida Select FullScreen Case 0 Graphics3D(Width, Height, Depth,2) Initext Case 1 Graphics3D(Width, Height, Depth,1) Initext End Select Else Select FullScreen Case 0 Graphics3D(800, 600, 0,2) Initext Case 1 Graphics3D(800, 600, 0,1) Initext End Select EndIf HidePointer() TextureFilter("m_", 1 + 4) TextureFilter("a_", 1 + 2) PlayIntroMovie() Cam = CreateCamera() ;WideScreen Adjust Camera GYFovCam Cam, Width , Height GY_Load(Cam) ; Setfogrange Distance and colour CameraRange Cam, 1, 30000 CameraFogMode Cam,1 CameraFogRange Cam, 300, 5200 CameraFogColor Cam, 0, 51, 102 ;------- ;LIGHTS ;------- ;Ambient Light Amb_Light = CreateLight(1) LightRange Amb_Light, 10000 LightColor Amb_Light, 0, 51, 102 PositionEntity Amb_Light, 0, 1000, 0 ;Omni Lights Om_Light1 = CreateLight(2) LightRange Om_Light1, 150 LightColor Om_Light1, 204, 102, 0 PositionEntity Om_Light1, -400, 300, 800 Om_Light2 = CreateLight(2) LightRange Om_Light2, 150 LightColor Om_Light2, 204, 102, 0 PositionEntity Om_Light2, -300, 250, 300 Om_Light3 = CreateLight(2) LightRange Om_Light3, 120 LightColor Om_Light3, 204, 102, 0 PositionEntity Om_Light3, -100, 25, 100 You will have to change the Location of each light (ambient doesn't matter where it goes) to where you want it. I think thats it, if your having any problems then leave a comment as i may have left something out. Adding Lights to bones on a model will be V3.0 and is not ready yet so i'll upload that at a later date once i get it working again.